//定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。 
//
// 
//
// 示例: 
//
// 输入: 1->2->3->4->5->NULL
//输出: 5->4->3->2->1->NULL 
//
// 
//
// 限制： 
//
// 0 <= 节点个数 <= 5000 
//
// 
//
// 注意：本题与主站 206 题相同：https://leetcode-cn.com/problems/reverse-linked-list/ 
// Related Topics 链表 
// 👍 85 👎 0

package leetcode.editor.cn;

import common.bean.ListNode;
import common.util.MyUtil;

/**
 * Java：反转链表
 *
 * @author changgui
 */
@SuppressWarnings("all")
public class P剑指_offer_24_FanZhuanLianBiaoLcof {
    public static void main(String[] args) {
        Solution solution = new P剑指_offer_24_FanZhuanLianBiaoLcof().new Solution();
        ListNode node = MyUtil.createNode(1, 2, 3, 4, 5, 6, 7, 8);
        MyUtil.printListNode(solution.reverseList(node));

    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public ListNode reverseList(ListNode head) {
            if(head == null || head.next == null) {
                return head;
            }
            ListNode newHead = null;
            ListNode temp = null;
            for(ListNode curr = head; curr != null;) {
                temp = curr.next;
                curr.next = newHead;
                newHead = curr;
                curr = temp;
            }

            return newHead;
        }
    }
    //class Solution {
    //    public ListNode reverseList(ListNode head) {
    //        if(head == null || head.next == null) {
    //            return head;
    //        }
    //        ListNode p = reverseList(head.next);
    //        head.next.next = head;
    //        head.next = null;
    //        return p;
    //    }
    //}
    //leetcode submit region end(Prohibit modification and deletion)

}